﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Banco
{
    public class GetCuentaProyectoList
    {
        int _count;



        public int Count(string bancoStr,
                         int startRowIndex,
                         int maximumRows,
                         string sortExpression)
        {
            return _count;
        }



        public IQueryable<CuentaProyectoListInfo> ApplySelect_CuentaProyectoInfo()
        {
            var q = from a in DbUtil.Db.CuentaFinanciamientos
                    select new CuentaProyectoListInfo
                    {
                       
                        tipoCuotaStr = (a.bitEsMontoCI == true) ? "MONTO" : "PORCENTAJE",
                        CuotaEnCuentaStr = (a.bitCuotaEnCuenta == true) ? "EN CUENTA" : "NO",
                        bancoFinanciero = a.Banco.descripcion,
                        idBancoFinanciero=a.idBanco,
                        comentario=a.comentario,
                        
                       idProyecto=a.idProyecto,
                        idInternal=a.idInternal,
                        cuotaInical=a.cuotaInicial,
                        };
            return q;
        }
        public IQueryable<CuentaProyectoListInfo> ApplySort(IQueryable<CuentaProyectoListInfo> q, 
                                                             string sortExpression)
        {
            switch (sortExpression)
            {
                case "bitActivo":
                    q = q.OrderBy(b => b.bitActivo);
                    break;
                case "bitActivo DESC":
                    q = q.OrderByDescending(b => b.bitActivo);
                    break;

               

                case "tipoCuotaStr":
                    q = q.OrderBy(b => b.tipoCuotaStr);
                    break;
                case "tipoCuotaStr DESC":
                    q = q.OrderByDescending(b => b.tipoCuotaStr);
                    break;

                case "bancoFinanciero":
                    q = q.OrderBy(b => b.bancoFinanciero);
                    break;
                case "bancoFinanciero DESC":
                    q = q.OrderByDescending(b => b.bancoFinanciero);
                    break;

                case "comentario":
                    q = q.OrderBy(b => b.comentario);
                    break;
                case "comentario DESC":
                    q = q.OrderByDescending(b => b.comentario);
                    break;

                case "cuotaInical":
                    q = q.OrderBy(b => b.cuotaInical);
                    break;
                case "cuotaInical DESC":
                    q = q.OrderByDescending(b => b.cuotaInical);
                    break;

                case "CuotaEnCuentaStr":
                    q = q.OrderBy(b => b.cuotaInical);
                    break;
                case "CuotaEnCuentaStr DESC":
                    q = q.OrderByDescending(b => b.cuotaInical);
                    break;

                    

                case "cuenta":
                    q = q.OrderBy(b => b.cuenta);
                    break;
                case "cuenta DESC":
                    q = q.OrderByDescending(b => b.cuenta);
                    break;

                default:
                    q = q.OrderByDescending(b => b.bancoFinanciero).OrderByDescending(p => p.idInternal);
                    break;
            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<CuentaProyectoListInfo> Execute(string bancoStr,
                                         int startRowIndex,
                                         int maximumRows,
                                         string sortExpression)
        {
            

            var q = ApplySelect_CuentaProyectoInfo();
            int idEmpresa = (int)System.Web.HttpContext.Current.Session["login.Empresa.idEmpresa"];

            q = q.Where(a => (bancoStr == "0" ? a.idBancoFinanciero != 0 : a.idBancoFinanciero == Convert.ToInt32(bancoStr))
                             
                            );




            _count = q.Count();

            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }




    }
}
